#pragma once
#ifndef _INSTANCEI_H
#define _INSTANCEI_H

#include <vector>

#include "horse.h"
#include "utils.h"

class InstanceI
{
public:
	typedef std::vector<std::vector<unsigned> > penalties_t;
	typedef std::vector<Horse> horses_t;

	virtual unsigned getPenalty(const unsigned x, const unsigned y) const = 0;

	virtual unsigned getPenalty(const utils::coords_t c) const = 0;

	//get collection of coordinates of horses
	virtual const horses_t& getHorses() const = 0;

	//velikost sachovnice
	virtual unsigned n() const = 0;

	//pocet jezdcu
	virtual unsigned k() const = 0;
	
	//max. pocet tahu do reseni
	virtual unsigned q() const = 0;
	
	//virtual dtor.
	virtual ~InstanceI() {}
};

#endif
